package tesssty;

class LiczbaException extends Exception{
	LiczbaException (String err){
		super(err);
	}
}


public class Liczba {
	int dziesietna;
	static String[] zmienione={"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
	static int[] dziesietne={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
	
	Liczba() throws LiczbaException{
		throw new LiczbaException("nie podales argumentow");	
	}
	
	Liczba(int n) {
		dziesietna=n;
	}

	
	Liczba(String n, int podstawa) throws LiczbaException {  
		int b;
		int a=0;
		int dlugoscN=n.length();
		int przechowaj[]=new int[dlugoscN];
		if(podstawa<2 || podstawa>16) throw new LiczbaException("liczba: "+n+" ma nie poprawna podstawe "+ podstawa);
		else{
			for(b=0;b<dlugoscN;b++){  //przegladamy po literce,cyferce podana liczbe 
				for(int q=0;q<=zmienione.length-1;q++){ //sprawdzamy czy jest w tablicy
					if((String.valueOf(n.charAt(b))).equals(zmienione[q])){//jesli sa takie same to zwracamy w dziesietnych i do tablicy	
						przechowaj[a]=dziesietne[q];
						a++;
					}
					//else throw new LiczbaException("liczba:  "+n+"  nie jest poprawna");
				}	
			}
			
			
			dziesietna=0;
	
			for(int c = dlugoscN-1; c >= 0; c--){
				dziesietna += przechowaj[dlugoscN-c-1] * Math.pow(podstawa, c);
			}
		}
	}
	
	
	public String zapis(int podstawa) throws LiczbaException {
		String zmieniona="";
		int n=dziesietna;
		int e=0;
		int p=n;
		while(p>0){   // zliczamy ile razy podzieli sie nasze n zeby stworzyc odpowiednia tablice
			p=p/podstawa;
			e++;
		}
		int ResztyDzielenia[]=new int[e];
		
			for(int b=0;n>0;b++){   //n jest nasza liczba ktora zamieniamy na jakis system
				ResztyDzielenia[b]=n%podstawa; //wpisujemy reszty z dzielenia do tablicy
				n=n/podstawa;  
			}
			for(int c=ResztyDzielenia.length-1;c>=0;c--){
				if(ResztyDzielenia[c]>9){				
					int g=ResztyDzielenia[c]; //szukamy na ktorym miejscu jest nasza litera w tablilcy -9 bo tyle liczb ktore maja wlasne znaki +(-1) bo numerowanie tablicy zaczyna sie od 0
					zmieniona=zmieniona+zmienione[g]; //przypisujemy ta litere do napisu
					
				}
				else{
					zmieniona=zmieniona+ResztyDzielenia[c];
				}
		}
		
		
	return zmieniona;	
	}

}
